export function recursionFn<T=any>(source:{[key:string] : any}[], parentId:any, keyField = 'id', parentField = 'parentId', childrenName = 'children') :T[]{
    let target:T[] = []
    function fn(s:{[key:string] : any}[], t:any[], p:any) {
      s.forEach(item => {
        if(item[parentField] == p) {
          t.push(item)
          item[childrenName] = []
          fn(s, item[childrenName], item[keyField])
          if(item[childrenName].length == 0) {
              delete item[childrenName]
          }
        }
      })
    }
  
    fn(source, target, parentId)
  
    return target
  }



export function newsDateRange(today:Date, offfset:number) {
  let year = today.getFullYear();
  let month = String(today.getMonth() + 1).padStart(2, '0'); // 月份是从0开始的，所以要加1
  let day = String(today.getDate()).padStart(2, '0');
  let end = `${year}-${month}-${day}`;

  let twoDaysAgo = new Date(today);
  twoDaysAgo.setDate(today.getDate() - offfset);

  let yearTwoDaysAgo = twoDaysAgo.getFullYear();
  let monthTwoDaysAgo = String(twoDaysAgo.getMonth() + 1).padStart(2, '0');
  let dayTwoDaysAgo = String(twoDaysAgo.getDate()).padStart(2, '0');
  let start = `${yearTwoDaysAgo}-${monthTwoDaysAgo}-${dayTwoDaysAgo}`;

  return {start, end}
}



export function formatVisitNumber(num:number) {
  if(num < 1000) return num
  if(num < 10000) return Number((num / 1000).toFixed(1)) + 'K'
  return Number((num / 10000).toFixed(1)) + 'W'
}


export function parseTime(time:any, cFormat:string='{y}-{m}-{d} {h}:{i}:{s}') :string{
	if(time == 0 || time == null){
		return ''
	}
	
  if (arguments.length === 0) {
    return null
  }
  const format = cFormat
  let date
  if (typeof time === 'object') {
    date = time
  } else {
    if (!isNaN(time) && ('' + time).length === 10) time = parseInt(time) * 1000

    date = new Date(time)
  }

  const formatObj:any = {
    y: date.getFullYear(),
    m: date.getMonth() + 1,
    d: date.getDate(),
    h: date.getHours(),
    i: date.getMinutes(),
    s: date.getSeconds(),
    a: date.getDay()
  }
  const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
    let value = formatObj[key]
    if (key === 'a') return ['一', '二', '三', '四', '五', '六', '日'][value - 1]
    if (result.length > 0 && value < 10) {
      value = '0' + value
    }
    return value || 0
  })
	
  return time_str
}


export function isMobile() {  
    // 这些正则表达式匹配常见的移动设备的用户代理字符串  
    const mobileRegex = /Android|mobile|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i;  
  
    // 获取用户代理字符串  
    const userAgent = navigator.userAgent || navigator.vendor || window.opera;  
  
    // 检查用户代理字符串是否匹配移动设备的正则表达式  
    return mobileRegex.test(userAgent);  
}  